from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support.ui import Select
from selenium.webdriver.common.by import By
import time
import math

from PIL import Image
from PIL import ImageGrab

from cjy import *

time_start = time.time()

opt=Options()
opt.add_experimental_option('excludeSwitches',['enable-automation'])#关闭自动化提示
opt.add_argument("--start-maximized")#最大化
opt.add_argument('ignore-certificate-errors')#加上不出现私密连接
bro=webdriver.Chrome(r'C:\Users\hsk\Downloads\chromedriver_win32 (2)/chromedriver.exe',options=opt)


bro.get('https://10.6.133.106/ydata/login.do')
bro.implicitly_wait(10)

username=bro.find_element_by_name("userId")
password=bro.find_element_by_name("passwd")
vdcode=bro.find_element_by_name("imgtvalidate")
vdcode_img=bro.find_element_by_xpath('//*[@id="img"]')

#用户名
username.send_keys('140700zgq')
#密码
password.send_keys('lwzb*123!')
#验证码图片
location=vdcode_img.location

size=vdcode_img.size
print(location,size)
box=(location['x'],location['y']+70,location['x']+size['width'],location['y']+70+size['height'])
print(box)

bro.save_screenshot('c:\\users\\hsk\desktop\\vdcode_3.png')
img=Image.open('c:\\users\\hsk\desktop\\vdcode_3.png')
vdcode_path='c:\\users\\hsk\\desktop\\vdcode_4.png'

frame=ImageGrab.grab(box)

frame.save(vdcode_path)

chaojiying = Chaojiying_Client('zgq001', 'zgq071726', '924951')
im = open(vdcode_path, 'rb').read()
result=chaojiying.PostPic(im, 1004)['pic_str']
print(result)

vdcode.send_keys(result)

login=bro.find_element_by_xpath('/html/body/map/area[1]')

login.click()

bro.switch_to.frame('olp_leftFrame')
bro.find_element_by_xpath('//*[@id="item6"]').click()
bro.find_element_by_xpath('//*[@id="M04"]/tbody/tr[1]/td[2]/a').click()
bro.switch_to.default_content()

#回到主窗口
#切换到主框架
#//*[@id="tables"]/tbody/tr[21]/td[4]/a
#选择月报
#选择月份
#选择服务业财务月报
#退出框架
bro.switch_to.frame('olp_mainFrame')
#bro.find_element_by_xpath('//*[@id="tables"]/tbody/tr[21]/td[3]/a').click()
#bro.find_element(By.ID,'periodType')
# 创建Select对象
select = Select(bro.find_element(By.ID, "periodType"))

# 通过 Select 对象选中月报
select.select_by_visible_text("月报")


#点击服务业月报//*[@id="tables"]/tbody/tr[23]/td[4]/a
#//*[@id="tables"]/tbody/tr[24]/td[4]/a
bro.find_element(By.XPATH,'//*[@id="tables"]/tbody/tr[24]/td[4]/a').click()
#退出框架
bro.switch_to.default_content()

#到‘基层数据查询’窗口
for handle in  bro.window_handles:
    # 先切换到该窗口
    bro.switch_to.window(handle)
    #print(handle)
    # 得到该窗口的标题栏字符串，判断是不是我们要操作的那个窗口
    #'必应'可，'Bing'可？
    if '基层数据查询' in bro.title:
        # 如果是，那么这时候WebDriver对象就是对应的该窗口，正好，跳出循环，
        break

# wd.title属性是当前窗口的标题栏文本
print(bro.title)
#记录主窗口
mainWindow = bro.current_window_handle
bro.switch_to.frame('workFrame')
select = Select(bro.find_element(By.ID, "querytemp"))

# 通过 Select 对象选中
select.select_by_visible_text("规上服务业月度主要指标")

#占击每页30行/html/body/form/table/tbody/tr[2]/td[2]/table[2]/tbody/tr/td/a[1]
bro.find_element(By.XPATH,'/html/body/form/table/tbody/tr[2]/td[2]/table[2]/tbody/tr/td/a[1]').click()

#跳入新窗口&nbsp;
for handle in bro.window_handles:
    # 先切换到该窗口
    bro.switch_to.window(handle)
    #print(handle)
    # 得到该窗口的标题栏字符串，判断是不是我们要操作的那个窗口
    #'必应'可，'Bing'可？
    if '&nbsp;' in bro.title:
        # 如果是，那么这时候WebDriver对象就是对应的该窗口，正好，跳出循环，
        break
#输入100//*[@id="pageSize"]
bro.find_element(By.XPATH,'//*[@id="pageSize"]').send_keys('200')
#点击确定/html/body/div/span[1]/input
bro.find_element(By.XPATH,'/html/body/div/span[1]/input').click()
#回到主窗口
bro.switch_to.window(mainWindow)
#回到workframe工作框架
bro.switch_to.frame('workFrame')

#标题
bt=bro.find_elements(By.CSS_SELECTOR,'tr.tab-bt>td')
for btx in bt:
    print(btx.text)

#"写入文件"
with open(r'.\data1.csv', 'w', encoding='utf-8') as f:
    for btx in bt:
        f.write(btx.text + ',')
    f.write('\n')
#读出修改
with open(r'.\data1.csv','r',encoding='utf-8') as f:
    #str=f.read()
    #print(str)
    lt=f.readlines()
    print(lt[0])
    print(type(lt[0]))
    lt[0]=lt[0].replace(', ,',',')
    lt[0]=lt[0].replace('操作,','查看,往期,')
    lt[0]=lt[0].replace(r'[201-1] 行业代码(GB/T4754-2017)','行业代码')
    lt[0] = lt[0].replace('期别(年)', '期别年')
    lt[0] = lt[0].replace('期别(月)', '期别月')
    lt[0]=lt[0].replace(r';','')
    lt[0] = lt[0].replace(r'1-本月', '本期')
    lt[0] = lt[0].replace('(损失以“-”号记)', '')
    #lt[0] = lt[0].replace('本期资产处置收益(损失以“-”号记)千元','本期资产处置收益千元')
    #lt[0] = lt[0].replace('本期资产处置收益(损失以“-”号记)千元', '本期资产处置收益千元')
    #lt[0] = lt[0].replace('上年同期资产处置收益(损失以“-”号记)千元', '上年同期资产处置收益千元')
    #lt[0] = lt[0].replace(r'1-本月;营业收入;千元', '本期营收')
    #lt[0] = lt[0].replace(r'上年同期;营业收入;千元', '上期营收')
    print(lt[0])
    print('#'*30)
    print(lt)
#再次写入修改好的标题行
with open(r'data1.csv','w',encoding='utf-8') as f:
    f.writelines(lt)
'''

#记录主窗口
mainWindow = bro.current_window_handle
#修改每页30行为100行
#占击每页30行/html/body/form/table/tbody/tr[2]/td[2]/table[2]/tbody/tr/td/a[1]
bro.find_element(By.XPATH,'/html/body/form/table/tbody/tr[2]/td[2]/table[2]/tbody/tr/td/a[1]').click()
#退出当前frame
bro.switch_to.default_content()
#跳入新窗口&nbsp;
for handle in bro.window_handles:
    # 先切换到该窗口
    bro.switch_to.window(handle)
    #print(handle)
    # 得到该窗口的标题栏字符串，判断是不是我们要操作的那个窗口
    #'必应'可，'Bing'可？
    if '&nbsp;' in bro.title:
        # 如果是，那么这时候WebDriver对象就是对应的该窗口，正好，跳出循环，
        break
#输入100//*[@id="pageSize"]
bro.find_element(By.XPATH,'//*[@id="pageSize"]').send_keys('100')
#点击确定/html/body/div/span[1]/input
bro.find_element(By.XPATH,'/html/body/div/span[1]/input').click()
#回到主窗口
bro.switch_to.window(mainWindow)
#回到workframe工作框架
bro.switch_to.frame('workFrame')

'''

#ys 月数
n='2021'
ys=[2]
for y in ys:
    ny=n+'年'+str(y)+'月'
    select = Select(bro.find_element(By.NAME, "period"))

    # 通过 Select 对象选中
    select.select_by_visible_text(ny)
    #time.sleep(1)
    #30行数据
    datas=bro.find_elements(By.CSS_SELECTOR,'tr.tab-bt~tr')
    for data in datas:
        print(data.text)


    total_page=bro.find_element(By.ID,'total_page')
    print(total_page.text)
    total_page=int(total_page.text[1:-1])
    #total_num=int(bro.find_element(By.ID,'total_num').text)
    #total_page=math.ceil(total_num/100)
    #print(total_page)
    page=1
    for page in range(1,total_page+1):
        #退格符,两次,出现两次
        bro.find_element(By.XPATH,'/html/body/form/table/tbody/tr[2]/td[2]/table[2]/tbody/tr/td/input').send_keys('\b\b')
        bro.find_element(By.XPATH,'/html/body/form/table/tbody/tr[2]/td[2]/table[2]/tbody/tr/td/input').send_keys(page)
        bro.find_element(By.XPATH,'/html/body/form/table/tbody/tr[2]/td[2]/table[2]/tbody/tr/td/a[2]').click()
        trs=bro.find_elements(By.CSS_SELECTOR,'tr.tab-bt~tr')
        for tr in trs:
            print(tr.text)

        with open(r'data1.csv', 'a', encoding='utf-8') as f:
            for tr in trs:
                tds = tr.find_elements(By.TAG_NAME, 'td')
                for td in tds:
                    f.write(td.text + ',')
                f.write('\n')



bro.switch_to.default_content()
bro.quit()
time_end = time.time()
print('time is',time_end-time_start,'s')